home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / Sample Code / Files / Standard File / StandardGetFolder / MoreFiles.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-28  |  16.6 KB  |  631 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        MoreFiles.c
  3.     
  4.     Description:The long lost high-level and FSSpec File Manager functions.
  5.  
  6.     Author:        JL
  7.  
  8.     Copyright:     Copyright: © 1992-1999 by Apple Computer, Inc.
  9.                 all rights reserved.
  10.     
  11.     Disclaimer:    You may incorporate this sample code into your applications without
  12.                 restriction, though the sample code has been provided "AS IS" and the
  13.                 responsibility for its operation is 100% yours.  However, what you are
  14.                 not permitted to do is to redistribute the source as "DSC Sample Code"
  15.                 after having made changes. If you're going to re-distribute the source,
  16.                 we require that you make it clear in the source that the code was
  17.                 descended from Apple Sample Code, but that you've made changes.
  18.     
  19.     Change History (most recent first):
  20.                 6/25/99    Updated for Metrowerks Codewarror Pro 2.1(KG)
  21.  
  22. */
  23. #include <Types.h>
  24. #include <Errors.h>
  25. #include <Files.h>
  26.  
  27. #define    __COMPILINGMOREFILES
  28.  
  29. #include "MoreFiles.h"
  30. #include "MoreFilesExtras.h"
  31.  
  32. /*****************************************************************************/
  33.  
  34. pascal    OSErr    HGetVolParms(ConstStr255Param volName,
  35.                              short vRefNum,
  36.                              GetVolParmsInfoBuffer *volParmsInfo,
  37.                              long *infoSize)
  38. {
  39.     HParamBlockRec pb;
  40.     OSErr error;
  41.  
  42.     pb.ioParam.ioNamePtr = (StringPtr)volName;
  43.     pb.ioParam.ioVRefNum = vRefNum;
  44.     pb.ioParam.ioBuffer = (Ptr)volParmsInfo;
  45.     pb.ioParam.ioReqCount = *infoSize;
  46.     error = PBHGetVolParmsSync(&pb);
  47.     if ( error == noErr )
  48.     {
  49.         *infoSize = pb.ioParam.ioActCount;
  50.     }
  51.     return ( error );
  52. }
  53.  
  54. /*****************************************************************************/
  55.  
  56. pascal    OSErr    HCreateMinimum(short vRefNum,
  57.                                long dirID,
  58.                                ConstStr255Param fileName)
  59. {
  60.     HParamBlockRec pb;
  61.  
  62.     pb.fileParam.ioNamePtr = (StringPtr)fileName;
  63.     pb.fileParam.ioVRefNum = vRefNum;
  64.     pb.ioParam.ioVersNum = 0;
  65.     pb.fileParam.ioDirID = dirID;
  66.     return ( PBHCreateSync(&pb) );
  67. }
  68.  
  69. /*****************************************************************************/
  70.  
  71. pascal    OSErr    FSpCreateMinimum(const FSSpec *spec)
  72. {
  73.     return ( HCreateMinimum(spec->vRefNum, spec->parID, spec->name) );
  74. }
  75.  
  76. /*****************************************************************************/
  77.  
  78. pascal    OSErr    ExchangeFiles(short vRefNum,
  79.                               long srcDirID,
  80.                               ConstStr255Param srcName,
  81.                               long dstDirID,
  82.                               ConstStr255Param dstName)
  83. {
  84.     HParamBlockRec pb;
  85.  
  86.     pb.fidParam.ioVRefNum = vRefNum;
  87.     pb.fidParam.ioSrcDirID = srcDirID;
  88.     pb.fidParam.ioNamePtr = (StringPtr)srcName;
  89.     pb.fidParam.ioDestDirID = dstDirID;
  90.     pb.fidParam.ioDestNamePtr = (StringPtr)dstName;
  91.     return ( PBExchangeFilesSync(&pb) );
  92. }
  93.  
  94. /*****************************************************************************/
  95.  
  96. pascal    OSErr    ResolveFileIDRef(ConstStr255Param volName,
  97.                                  short vRefNum,
  98.                                  long fileID,
  99.                                  long *parID,
  100.                                  StringPtr fileName)
  101. {
  102.     HParamBlockRec pb;
  103.     OSErr error;
  104.     Str255 tempStr;
  105.     
  106.     tempStr[0] = 0;
  107.     if ( volName != NULL )
  108.     {
  109.         BlockMoveData(volName, tempStr, volName[0] + 1);
  110.     }
  111.     pb.fidParam.ioNamePtr = (StringPtr)tempStr;
  112.     pb.fidParam.ioVRefNum = vRefNum;
  113.     pb.fidParam.ioFileID = fileID;
  114.     error = PBResolveFileIDRefSync(&pb);
  115.     if ( error == noErr )
  116.     {
  117.         *parID = pb.fidParam.ioSrcDirID;
  118.         if ( fileName != NULL )
  119.         {
  120.             BlockMoveData(tempStr, fileName, tempStr[0] + 1);
  121.         }
  122.     }
  123.     return ( error );
  124. }
  125.  
  126. /*****************************************************************************/
  127.  
  128. pascal    OSErr    FSpResolveFileIDRef(ConstStr255Param volName,
  129.                                     short vRefNum,
  130.                                     long fileID,
  131.                                     FSSpec *spec)
  132. {
  133.     OSErr    error;
  134.     
  135.     error = DetermineVRefNum(volName, vRefNum, &(spec->vRefNum));
  136.     if ( error == noErr )
  137.     {
  138.         error = ResolveFileIDRef(volName, vRefNum, fileID, &(spec->parID), spec->name);
  139.     }
  140.     return ( error );
  141. }
  142.  
  143. /*****************************************************************************/
  144.  
  145. pascal    OSErr    CreateFileIDRef(short vRefNum,
  146.                                 long parID,
  147.                                 ConstStr255Param fileName,
  148.                                 long *fileID)
  149. {
  150.     HParamBlockRec pb;
  151.     OSErr error;
  152.  
  153.     pb.fidParam.ioNamePtr = (StringPtr)fileName;
  154.     pb.fidParam.ioVRefNum = vRefNum;
  155.     pb.fidParam.ioSrcDirID = parID;
  156.     error = PBCreateFileIDRefSync(&pb);
  157.     if ( (error == noErr) || (error == fidExists) || (error == afpIDExists) )
  158.     {
  159.         *fileID = pb.fidParam.ioFileID;
  160.     }
  161.     return ( error );
  162. }
  163.  
  164. /*****************************************************************************/
  165.  
  166. pascal    OSErr    FSpCreateFileIDRef(const FSSpec *spec,
  167.                                    long *fileID)
  168. {
  169.     return ( CreateFileIDRef(spec->vRefNum, spec->parID, spec->name, fileID) );
  170. }
  171.  
  172. /*****************************************************************************/
  173.  
  174. pascal    OSErr    DeleteFileIDRef(ConstStr255Param volName,
  175.                                 short vRefNum,
  176.                                 long fileID)
  177. {
  178.     HParamBlockRec pb;
  179.  
  180.     pb.fidParam.ioNamePtr = (StringPtr)volName;
  181.     pb.fidParam.ioVRefNum = vRefNum;
  182.     pb.fidParam.ioFileID = fileID;
  183.     return ( PBDeleteFileIDRefSync(&pb) );
  184. }
  185.  
  186. /*****************************************************************************/
  187.  
  188. pascal    OSErr    FlushFile(short refNum)
  189. {
  190.     ParamBlockRec pb;
  191.  
  192.     pb.ioParam.ioRefNum = refNum;
  193.     return ( PBFlushFileSync(&pb) );
  194. }
  195.  
  196. /*****************************************************************************/
  197.  
  198. pascal    OSErr    LockRange(short refNum,
  199.                           long rangeLength,
  200.                           long rangeStart)
  201. {
  202.     ParamBlockRec pb;
  203.  
  204.     pb.ioParam.ioRefNum = refNum;
  205.     pb.ioParam.ioReqCount = rangeLength;
  206.     pb.ioParam.ioPosMode = fsFromStart;
  207.     pb.ioParam.ioPosOffset = rangeStart;
  208.     return ( PBLockRangeSync(&pb) );
  209. }
  210.  
  211. /*****************************************************************************/
  212.  
  213. pascal    OSErr    UnlockRange(short refNum,
  214.                             long rangeLength,
  215.                             long rangeStart)
  216. {
  217.     ParamBlockRec pb;
  218.  
  219.     pb.ioParam.ioRefNum = refNum;
  220.     pb.ioParam.ioReqCount = rangeLength;
  221.     pb.ioParam.ioPosMode = fsFromStart;
  222.     pb.ioParam.ioPosOffset = rangeStart;
  223.     return ( PBUnlockRangeSync(&pb) );
  224. }
  225.  
  226. /*****************************************************************************/
  227.  
  228. pascal    OSErr    GetForeignPrivs(short vRefNum,
  229.                                 long dirID,
  230.                                 ConstStr255Param name,
  231.                                 void *foreignPrivBuffer,
  232.                                 long *foreignPrivSize,
  233.                                 long *foreignPrivInfo1,
  234.                                 long *foreignPrivInfo2,
  235.                                 long *foreignPrivInfo3,
  236.                                 long *foreignPrivInfo4)
  237. {
  238.     HParamBlockRec pb;
  239.     OSErr error;
  240.  
  241.     pb.foreignPrivParam.ioNamePtr = (StringPtr)name;
  242.     pb.foreignPrivParam.ioVRefNum = vRefNum;
  243.     pb.foreignPrivParam.ioForeignPrivDirID = dirID;    
  244.     pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
  245.     pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
  246.     error = PBGetForeignPrivsSync(&pb);
  247.     *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
  248.     *foreignPrivInfo1 = pb.foreignPrivParam.ioForeignPrivInfo1;
  249.     *foreignPrivInfo2 = pb.foreignPrivParam.ioForeignPrivInfo2;
  250.     *foreignPrivInfo3 = pb.foreignPrivParam.ioForeignPrivInfo3;
  251.     *foreignPrivInfo4 = pb.foreignPrivParam.ioForeignPrivInfo4;
  252.     return ( error );
  253. }
  254.  
  255. /*****************************************************************************/
  256.  
  257. pascal    OSErr    FSpGetForeignPrivs(const FSSpec *spec,
  258.                                    void *foreignPrivBuffer,
  259.                                    long *foreignPrivSize,
  260.                                    long *foreignPrivInfo1,
  261.                                    long *foreignPrivInfo2,
  262.                                    long *foreignPrivInfo3,
  263.                                    long *foreignPrivInfo4)
  264. {
  265.     return ( GetForeignPrivs(spec->vRefNum, spec->parID, spec->name,
  266.                              foreignPrivBuffer, foreignPrivSize,
  267.                              foreignPrivInfo1, foreignPrivInfo2,
  268.                              foreignPrivInfo3, foreignPrivInfo4) );
  269. }
  270.  
  271. /*****************************************************************************/
  272.  
  273. pascal    OSErr    SetForeignPrivs(short vRefNum,
  274.                                 long dirID,
  275.                                 ConstStr255Param name,
  276.                                 const void *foreignPrivBuffer,
  277.                                 long *foreignPrivSize,
  278.                                 long foreignPrivInfo1,
  279.                                 long foreignPrivInfo2,
  280.                                 long foreignPrivInfo3,
  281.                                 long foreignPrivInfo4)
  282. {
  283.     HParamBlockRec pb;
  284.     OSErr error;
  285.  
  286.     pb.foreignPrivParam.ioNamePtr = (StringPtr)name;
  287.     pb.foreignPrivParam.ioVRefNum = vRefNum;
  288.     pb.foreignPrivParam.ioForeignPrivDirID = dirID;    
  289.     pb.foreignPrivParam.ioForeignPrivBuffer = (Ptr)foreignPrivBuffer;
  290.     pb.foreignPrivParam.ioForeignPrivReqCount = *foreignPrivSize;
  291.     pb.foreignPrivParam.ioForeignPrivInfo1 = foreignPrivInfo1;
  292.     pb.foreignPrivParam.ioForeignPrivInfo2 = foreignPrivInfo2;
  293.     pb.foreignPrivParam.ioForeignPrivInfo3 = foreignPrivInfo3;
  294.     pb.foreignPrivParam.ioForeignPrivInfo4 = foreignPrivInfo4;
  295.     error = PBSetForeignPrivsSync(&pb);
  296.     if ( error == noErr )
  297.     {
  298.         *foreignPrivSize = pb.foreignPrivParam.ioForeignPrivActCount;
  299.     }
  300.     return ( error );
  301. }
  302.  
  303. /*****************************************************************************/
  304.  
  305. pascal    OSErr    FSpSetForeignPrivs(const FSSpec *spec,
  306.                                    const void *foreignPrivBuffer,
  307.                                    long *foreignPrivSize,
  308.                                    long foreignPrivInfo1,
  309.                                    long foreignPrivInfo2,
  310.                                    long foreignPrivInfo3,
  311.                                    long foreignPrivInfo4)
  312. {
  313.     return ( SetForeignPrivs(spec->vRefNum, spec->parID, spec->name,
  314.                              foreignPrivBuffer, foreignPrivSize,
  315.                              foreignPrivInfo1, foreignPrivInfo2,
  316.                              foreignPrivInfo3, foreignPrivInfo4) );
  317. }
  318.  
  319. /*****************************************************************************/
  320.  
  321. pascal    OSErr    HGetLogInInfo(ConstStr255Param volName,
  322.                               short vRefNum,
  323.                               short *loginMethod,
  324.                               StringPtr userName)
  325. {
  326.     HParamBlockRec pb;
  327.     OSErr error;
  328.  
  329.     pb.objParam.ioNamePtr = (StringPtr)volName;
  330.     pb.objParam.ioVRefNum = vRefNum;
  331.     pb.objParam.ioObjNamePtr = userName;
  332.     error = PBHGetLogInInfoSync(&pb);
  333.     if ( error == noErr )
  334.     {
  335.         *loginMethod = pb.objParam.ioObjType;
  336.     }
  337.     return ( error );
  338. }
  339.  
  340. /*****************************************************************************/
  341.  
  342. pascal    OSErr    HGetDirAccess(short vRefNum,
  343.                               long dirID,
  344.                               ConstStr255Param name,
  345.                               long *ownerID,
  346.                               long *groupID,
  347.                               long *accessRights)
  348. {
  349.     HParamBlockRec pb;
  350.     OSErr error;
  351.  
  352.     pb.accessParam.ioNamePtr = (StringPtr)name;
  353.     pb.accessParam.ioVRefNum = vRefNum;
  354.     pb.fileParam.ioDirID = dirID;
  355.     error = PBHGetDirAccessSync(&pb);
  356.     if ( error == noErr )
  357.     {
  358.         *ownerID = pb.accessParam.ioACOwnerID;
  359.         *groupID = pb.accessParam.ioACGroupID;
  360.         *accessRights = pb.accessParam.ioACAccess;
  361.     }
  362.     return ( error );
  363. }
  364.  
  365. /*****************************************************************************/
  366.  
  367. pascal    OSErr    FSpGetDirAccess(const FSSpec *spec,
  368.                                 long *ownerID,
  369.                                 long *groupID,
  370.                                 long *accessRights)
  371. {
  372.     return ( HGetDirAccess(spec->vRefNum, spec->parID, spec->name,
  373.                            ownerID, groupID, accessRights) );
  374. }
  375.  
  376. /*****************************************************************************/
  377.  
  378. pascal    OSErr    HSetDirAccess(short vRefNum,
  379.                               long dirID,
  380.                               ConstStr255Param name,
  381.                               long ownerID,
  382.                               long groupID,
  383.                               long accessRights)
  384. {
  385.     HParamBlockRec pb;
  386.  
  387.     pb.accessParam.ioNamePtr = (StringPtr)name;
  388.     pb.accessParam.ioVRefNum = vRefNum;
  389.     pb.fileParam.ioDirID = dirID;
  390.     pb.accessParam.ioACOwnerID = ownerID;
  391.     pb.accessParam.ioACGroupID = groupID;
  392.     pb.accessParam.ioACAccess = accessRights;
  393.     return ( PBHSetDirAccessSync(&pb) );
  394. }
  395.  
  396. /*****************************************************************************/
  397.  
  398. pascal    OSErr    FSpSetDirAccess(const FSSpec *spec,
  399.                                 long ownerID,
  400.                                 long groupID,
  401.                                 long accessRights)
  402. {
  403.     return ( HSetDirAccess(spec->vRefNum, spec->parID, spec->name,
  404.                            ownerID, groupID, accessRights) );
  405. }
  406.  
  407. /*****************************************************************************/
  408.  
  409. pascal    OSErr    HMapID(ConstStr255Param volName,
  410.                        short vRefNum,
  411.                        long ugID,
  412.                        short objType,
  413.                        StringPtr name)
  414. {
  415.     HParamBlockRec pb;
  416.  
  417.     pb.objParam.ioNamePtr = (StringPtr)volName;
  418.     pb.objParam.ioVRefNum = vRefNum;
  419.     pb.objParam.ioObjType = objType;
  420.     pb.objParam.ioObjNamePtr = name;
  421.     pb.objParam.ioObjID = ugID;
  422.     return ( PBHMapIDSync(&pb) );
  423. }
  424.  
  425. /*****************************************************************************/
  426.  
  427. pascal    OSErr    HMapName(ConstStr255Param volName,
  428.                          short vRefNum,
  429.                          ConstStr255Param name,
  430.                          short objType,
  431.                          long *ugID)
  432. {
  433.     HParamBlockRec pb;
  434.     OSErr error;
  435.  
  436.     pb.objParam.ioNamePtr = (StringPtr)volName;
  437.     pb.objParam.ioVRefNum = vRefNum;
  438.     pb.objParam.ioObjType = objType;
  439.     pb.objParam.ioObjNamePtr = (StringPtr)name;
  440.     error = PBHMapNameSync(&pb);
  441.     if ( error == noErr )
  442.     {
  443.         *ugID = pb.objParam.ioObjID;
  444.     }
  445.     return ( error );
  446. }
  447.  
  448. /*****************************************************************************/
  449.  
  450. pascal    OSErr    HCopyFile(short srcVRefNum,
  451.                           long srcDirID,
  452.                           ConstStr255Param srcName,
  453.                           short dstVRefNum,
  454.                           long dstDirID,
  455.                           ConstStr255Param dstPathname,
  456.                           ConstStr255Param copyName)
  457. {
  458.     HParamBlockRec pb;
  459.  
  460.     pb.copyParam.ioVRefNum = srcVRefNum;
  461.     pb.copyParam.ioDirID = srcDirID;
  462.     pb.copyParam.ioNamePtr = (StringPtr)srcName;
  463.     pb.copyParam.ioDstVRefNum = dstVRefNum;
  464.     pb.copyParam.ioNewDirID = dstDirID;
  465.     pb.copyParam.ioNewName = (StringPtr)dstPathname;
  466.     pb.copyParam.ioCopyName = (StringPtr)copyName;
  467.     return ( PBHCopyFileSync(&pb) );
  468. }
  469.  
  470. /*****************************************************************************/
  471.  
  472. pascal    OSErr    FSpCopyFile(const FSSpec *srcSpec,
  473.                             const FSSpec *dstSpec,
  474.                             ConstStr255Param copyName)
  475. {
  476.     return ( HCopyFile(srcSpec->vRefNum, srcSpec->parID, srcSpec->name,
  477.                        dstSpec->vRefNum, dstSpec->parID,
  478.                        dstSpec->name, copyName) );
  479. }
  480.  
  481. /*****************************************************************************/
  482.  
  483. pascal    OSErr    HMoveRename(short vRefNum,
  484.                             long srcDirID,
  485.                             ConstStr255Param srcName,
  486.                             long dstDirID,
  487.                             ConstStr255Param dstpathName,
  488.                             ConstStr255Param copyName)
  489. {
  490.     HParamBlockRec pb;
  491.  
  492.     pb.copyParam.ioVRefNum = vRefNum;
  493.     pb.copyParam.ioDirID = srcDirID;
  494.     pb.copyParam.ioNamePtr = (StringPtr)srcName;
  495.     pb.copyParam.ioNewDirID = dstDirID;
  496.     pb.copyParam.ioNewName = (StringPtr)dstpathName;
  497.     pb.copyParam.ioCopyName = (StringPtr)copyName;
  498.     return ( PBHMoveRenameSync(&pb) );
  499. }
  500.  
  501. /*****************************************************************************/
  502.  
  503. pascal    OSErr    FSpMoveRename(const FSSpec *srcSpec,
  504.                               const FSSpec *dstSpec,
  505.                               ConstStr255Param copyName)
  506. {
  507.     OSErr    error;
  508.     
  509.     /* make sure the FSSpecs refer to the same volume */
  510.     if ( srcSpec->vRefNum != dstSpec->vRefNum )
  511.     {
  512.         error = diffVolErr;
  513.     }
  514.     else
  515.     {
  516.         error = HMoveRename(srcSpec->vRefNum, srcSpec->parID, srcSpec->name, 
  517.                             dstSpec->parID, dstSpec->name, copyName);
  518.     }
  519.     return ( error );
  520. }
  521.  
  522. /*****************************************************************************/
  523.  
  524. pascal    OSErr    GetVolMountInfoSize(ConstStr255Param volName,
  525.                                     short vRefNum,
  526.                                     short *size)
  527. {
  528.     ParamBlockRec pb;
  529.  
  530.     pb.ioParam.ioNamePtr = (StringPtr)volName;
  531.     pb.ioParam.ioVRefNum = vRefNum;
  532.     pb.ioParam.ioBuffer = (Ptr)size;
  533.     return ( PBGetVolMountInfoSize(&pb) );
  534. }
  535.  
  536. /*****************************************************************************/
  537.  
  538. pascal    OSErr    GetVolMountInfo(ConstStr255Param volName,
  539.                                 short vRefNum,
  540.                                 void *volMountInfo)
  541. {
  542.     ParamBlockRec pb;
  543.  
  544.     pb.ioParam.ioNamePtr = (StringPtr)volName;
  545.     pb.ioParam.ioVRefNum = vRefNum;
  546.     pb.ioParam.ioBuffer = (Ptr)volMountInfo;
  547.     return ( PBGetVolMountInfo(&pb) );
  548. }
  549.  
  550. /*****************************************************************************/
  551.  
  552. pascal    OSErr    VolumeMount(const void *volMountInfo,
  553.                             short *vRefNum)
  554. {
  555.     ParamBlockRec pb;
  556.     OSErr error;
  557.  
  558.     pb.ioParam.ioBuffer = (Ptr)volMountInfo;
  559.     error = PBVolumeMount(&pb);
  560.     if ( error == noErr )
  561.     {
  562.         *vRefNum = pb.ioParam.ioVRefNum;
  563.     }
  564.     return ( error );
  565. }
  566.  
  567. /*****************************************************************************/
  568.  
  569. pascal    OSErr    Share(short vRefNum,
  570.                       long dirID,
  571.                       ConstStr255Param name)
  572. {
  573.     HParamBlockRec pb;
  574.  
  575.     pb.fileParam.ioNamePtr = (StringPtr)name;
  576.     pb.fileParam.ioVRefNum = vRefNum;
  577.     pb.fileParam.ioDirID = dirID;
  578.     return ( PBShareSync(&pb) );
  579. }
  580.  
  581. /*****************************************************************************/
  582.  
  583. pascal    OSErr    FSpShare(const FSSpec *spec)
  584. {
  585.     return ( Share(spec->vRefNum, spec->parID, spec->name) );
  586. }
  587.  
  588. /*****************************************************************************/
  589.  
  590. pascal    OSErr    Unshare(short vRefNum,
  591.                         long dirID,
  592.                         ConstStr255Param name)
  593. {
  594.     HParamBlockRec pb;
  595.  
  596.     pb.fileParam.ioNamePtr = (StringPtr)name;
  597.     pb.fileParam.ioVRefNum = vRefNum;
  598.     pb.fileParam.ioDirID = dirID;
  599.     return ( PBUnshareSync(&pb) );
  600. }
  601.  
  602. /*****************************************************************************/
  603.  
  604. pascal    OSErr    FSpUnshare(const FSSpec *spec)
  605. {
  606.     return ( Unshare(spec->vRefNum, spec->parID, spec->name) );
  607. }
  608.  
  609. /*****************************************************************************/
  610.  
  611. pascal    OSErr    GetUGEntry(short objType,
  612.                            StringPtr objName,
  613.                            long *objID)
  614. {
  615.     HParamBlockRec pb;
  616.     OSErr error;
  617.  
  618.     pb.objParam.ioObjType = objType;
  619.     pb.objParam.ioObjNamePtr = objName;
  620.     pb.objParam.ioObjID = *objID;
  621.     error = PBGetUGEntrySync(&pb);
  622.     if ( error == noErr )
  623.     {
  624.         *objID = pb.objParam.ioObjID;
  625.     }
  626.     return ( error );
  627. }
  628.  
  629. /*****************************************************************************/
  630.  
  631.